package ai.nlp;

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLSentence;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.StandardTokenizer;
import java.util.List;

public class ChineseNLPDemo {

    // 需要分析的示例中文文本
    private static final String TEXT = "自然语言处理是人工智能领域的重要方向。" +
            "清华大学位于北京市海淀区，成立于1911年。" +
            "今天的天气非常好，我感到非常开心！";

    public static void main(String[] args) {
        // 示例 1：基础分词
        basicSegmentation();

        // 示例 2：命名实体识别
        namedEntityRecognition();

        // 示例 3：依存句法分析
        //dependencyParsing();
    }

    // 基础分词示例
    private static void basicSegmentation() {
        System.out.println("\n=== 中文分词 ===");
        List<Term> termList = StandardTokenizer.segment(TEXT);
        for (Term term : termList) {
            System.out.printf("%s/%s ", term.word, term.nature);
        }
    }

    // 命名实体识别示例
    private static void namedEntityRecognition() {
        System.out.println("\n\n=== 命名实体识别 ===");
        Segment segment = HanLP.newSegment()
                .enableOrganizationRecognize(true)  // 启用机构识别
                .enablePlaceRecognize(true)         // 启用地名识别
                .enableCustomDictionary(false);     // 关闭自定义词典

        List<Term> termList = segment.seg(TEXT);
        for (Term term : termList) {
            if (term.nature.toString().startsWith("ns") ||  // 地名
                term.nature.toString().startsWith("nt")) {  // 机构名
                System.out.printf("[实体] %s/%s ", term.word, term.nature);
            }
        }
    }

    // 依存句法分析示例
    private static void dependencyParsing() {
        System.out.println("\n\n=== 依存句法分析 ===");
        String sentence = "我喜欢用Java写自然语言处理程序。";
        CoNLLSentence dependencyGraph = HanLP.parseDependency(sentence);
        System.out.println(dependencyGraph);
    }

//    private static void dependencyParsing() {
//        System.out.println("\n\n=== 依存句法分析 ===");
//        String sentence = "我喜欢用Java写自然语言处理程序。";
//        List<List<Term>> dependencyGraph = HanLP.parseDependency(sentence);
//
//        for (List<Term> terms : dependencyGraph) {
//            for (Term term : terms) {
//                System.out.printf("%s --%s--> %s\n",
//                        term.word,
//                        term.dependency().getLabel(),
//                        term.head.word);
//            }
//            System.out.println("------------------");
//        }
}